前一篇帶各位實作了 Instagram 點選朋友的所有文章,並按讚,再鎖定並點擊關閉按鈕。
今天要來實戰 Discord 的自動留言機器人,原理是讓 Selenium 用自己的帳號密碼登入 Discord,讓其重新導向到平到,並鎖定對話框,輸入訊息後自動傳出。
我們這次帳號密碼的部分會使用環境變數的方式來儲存。
將帳號密碼寫於 .env
檔案中
執行程式後能夠在指定伺服器與頻道內發言
首先,我們要使用 dotenv 這個套件來進行環境變數的操作。先安裝這個套件。
pipenv install python-dotenv
安裝完畢後,我們就能將環境變數寫在 .env
這個檔案內了。接下來,開啟一個新的檔案叫 .env
注意 . 的前面沒有文字,將 Discord 的信箱與密碼輸入。
再來,我們就能在 Python 中去取得這些環境變數了,只要進行以下操作。
from dotenv import load_dotenv
import os
load_dotenv()
email = os.getenv('email')
password = os.getenv('password')
接下來,我們進入想要發言的伺服器內的頻道 https://discord.com/channels/868043633197195314/874469620164227143,用 Selenium 開啟會發現被導向了登入的頁面,我們能分析一下郵件與密碼的欄位。
再來,我們將其的 XPath 複製,並撰寫個 Selenium 鎖定他們,並將資料用 send_keys()
傳入。
可以發現成功將信箱與密碼傳入了,我們再利用開發工具鎖定登入按鈕,並用 click()
點擊該按鈕進行登入。
from selenium import webdriver
from time import sleep
from dotenv import load_dotenv
import json
import os
load_dotenv()
email = os.getenv('email')
password = os.getenv('password')
if __name__ == '__main__':
with open('cookies_jar.json') as f:
cookies = json.load(f)
driver = webdriver.Chrome()
driver.get('https://discord.com/channels/868043633197195314/874469620164227143')
sleep(1)
driver.find_element_by_xpath(
'/html/body/div/div[2]/div/div/div/div/form/div/div/div[1]/div[2]/div[1]/div/div[2]/input').send_keys(email)
driver.find_element_by_xpath(
'/html/body/div/div[2]/div/div/div/div/form/div/div/div[1]/div[2]/div[2]/div/input').send_keys(password)
成功進行登入。
接下來,利用開發工具定位到留言框複製 XPath ,並在程式中鎖定該元素,之後 send_keys
傳入需要發言的文字,最後加個 \n
來進行發送。
from selenium import webdriver
from time import sleep
from dotenv import load_dotenv
import json
import os
load_dotenv()
email = os.getenv('email')
password = os.getenv('password')
if __name__ == '__main__':
with open('cookies_jar.json') as f:
cookies = json.load(f)
driver = webdriver.Chrome()
driver.get(
'https://discord.com/channels/868043633197195314/874469620164227143')
sleep(1)
driver.find_element_by_xpath(
'/html/body/div/div[2]/div/div/div/div/form/div/div/div[1]/div[2]/div[1]/div/div[2]/input').send_keys(email)
driver.find_element_by_xpath(
'/html/body/div/div[2]/div/div/div/div/form/div/div/div[1]/div[2]/div[2]/div/input').send_keys(password)
driver.find_element_by_xpath(
'/html/body/div/div[2]/div/div/div/div/form/div/div/div[1]/div[2]/button[2]/div').click()
sleep(4)
driver.find_element_by_xpath(
'/html/body/div[1]/div[2]/div/div[2]/div/div/div/div[2]/div[2]/div[2]/main/form/div[1]/div/div/div[1]/div/div[3]/div[2]/div').send_keys('大家好\n')
今天實作了自動發送留言至 Discord 的頻道中,如果想要擴充,可以使用 crontab 定時發言。也使用了 python-dotenv 來做環境變數的取得。
在版本控制的狀況下,需要在 .gitignore
下寫入 .env
避免將個資也 public 上去。
明天會帶各位爬取已經寫好的 API 上的資料。
Python dotenv 介紹與使用教學: https://myapollo.com.tw/zh-tw/python-dotenv/
Discord on web : https://discord.com/app
Selenium docs : https://readthedocs.org/projects/selenium-python/downloads/pdf/latest/